package m.html.form;

import m.html.element.Element;
import m.html.element.other.IElement;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class FormTest extends AbstractFormItem{
    @Override
    protected IElement getItemElement() {
        return null;
    }
    protected final Map<String,AbstractFormItem[]> items;
    protected AbstractFormItem[] otherItem;

    /** vue 表达式
     * 条件成立 显示item
     */
    protected FormTest(String test,AbstractFormItem... item){
        items=new LinkedHashMap<>();
        items.put(test,item);
    }
    /** vue 表达式
     * 条件成立 显示item
     */
    public static FormTest test(String test,AbstractFormItem... item){
        return new FormTest(test,item);
    }
    /** vue 表达式
     * 条件成立 显示item
     */
    public FormTest elseIf(String test,AbstractFormItem... item){
        items.put(test,item);
        return this;
    }
    /**
     * 条件不成立 最后显示item
     */
    public FormTest other(AbstractFormItem... item){
        otherItem=item;
        return this;
    }

    @Override
    protected IElement getElement() {
        List<Element> ls=new ArrayList<>();
        int i=0;
        for(String test : items.keySet()){
            if(i==0){
                Element ele=Element.tag("template").A("v-if",test);
                for(AbstractFormItem e : items.get(test)){
                    ele.E(e.getElement());
                }
                ls.add(ele);
            }else{
                Element ele=Element.tag("template").A("v-else-if",test);
                for(AbstractFormItem e : items.get(test)){
                    ele.E(e.getElement());
                }
                ls.add(ele);
            }
            i++;
        }
        if(null!=otherItem){
            Element ele=Element.tag("template").A("v-else");
            for(AbstractFormItem e : otherItem){
                ele.E(e.getElement());
            }
            ls.add(ele);
        }
        return Element.toElement(ls.toArray(new Element[0]));
    }
}
